《图解http 》笔记

  • cindy Liu
  • 3 Minutes
  • October 15, 2018




俗话说好的开发,底层知识必须过硬,不然再创新的技术,你也理解不深入,对于刚毕业的菜鸟来说,更要好好掌握好底层知识,《图解http》这本电子书在电脑里保存了一段时间,现在才翻出来看,两天看完了,很基本的知识点,用大量的图来做说明,简单易懂,适合入门. 以下是一些笔记

1、几种http方法:

GET:获取资源
POST: 传输实体主体
PUT :传输文件(http/1.1 自身不带验证机制,任何人都可以上传文件,存在安全问题。可配合web应用程序的验证机制,或者REST标准。)
HEAD: 获取报文头部
DELETE:删除文件(与PUT一样,不带验证机制,因此一般不使用)
OPTIONS :询问支持的方法(返回服务器支持的方法,如post get head)
TRACE:追踪路径
CONNECT:要求用隧道协议连接代理

2、使用cookie的状态管理

为什么:由于http是无状态的协议,因此无法记住每个客户端的状态,无状态也是http的优点之一,可以减少服务器的cpu以及内存资源的消耗。既要保留无状态的特征,又要解决记录状态的问题,引入了cookie。
是什么:cookie会从服务器端发送的响应报文中内一个叫做Set-Cookie的首部字段信息,通知客户端保存cookie,当下次请求的时候,会自动在请求报文中加入cookie值后发出去,服务端收到cookie后,会检查是哪个客户端发来的请求,然后对比服务器上的记录,得到之前的状态信息。

3、HTTP状态码

1XX(信息性状态码):接受的请求正在处理
2XX(成功状态码):请求正常处理完毕
3XX(重定向状态码):需要进行附加操作已完成请求
4XX(客户端错误状态码):服务器无法处理请求
5XX(服务器端错误状态码):服务器处理请求出错

举例:
200 OK 请求已经正常处理
204 No Content 请求处理成功!但没有资源可返回
206 Partial Content 表示之请求了一部分

301 Moved Permanently 永久性重定向,资源的uri已更新,客户端也要更新书签引用
302 Found 临时性重定向。 请求的资源已被分配了新的URI ,希望用户本次能使用新的URI

400 Bad Request 表示报文中存在语法错误,需修改后再次请求
401 Unauthorized 需要有通过http认证的认证信息
403 Forbidden 请求资源的访问被拒绝
404 Not Found 服务器上没有该资源

500 Internal Server Error 服务器端在执行请求时发生了错误
503 Service Unavailable 服务器暂时处于超负载或正在进行停机维护

4、HTTP的缺点

通信使用明文(不加密),内容可能会被窃听
不验证通信方的身份,因此有可能遭遇伪装
无法证明报文的完整性,所以有可能已遭

加密处理防止监听:
通信的加密:可以通过和SSL和TLS组合使用,加密http的通信内容。用SSL建立安全通信线路后,就可以在这条线路上进行安全HTTP通信,成位HTTPS(HTTP Secure)

内容的加密: 前提是要求客户端和服务器同事具备加密和揭秘的机制。相比https 仍有被篡改的风险

5、HTTPS

HTTPS = HTTP + 加密 + 认证 +完整性保护
HTTPS 并非一种新的协议,只是http通信接口部分用ssl 和tls 协议代替而已
HTTPS 会比HTTP慢2到100倍
HTTPS 会消耗更多的CPU 和内存资源,因此非敏感信息都是用Http通信,只有在包含个人信息等敏感数据时候,才使用HTTPS。(另外,想要节约购买证书的开销时,也可以选择HTTP)

6、WebSocket

一旦建立了websocket协议的通信连接,之后服务器与客户端可以相互发送JSON 、XML、HTML或图片等格式的数据。主要特点如下
推送功能:服务器可以直接发送数据,而不必等待可客户端的请求
减少通信量:建立连接后,一直保持连接状态,减少了每次连接的总开销,而且websocket的首部信息很小,通信量也响应减少

7、HTTP/2.0

HTTP/2.0于2015年发布,主要目标是“通过解决HTTP/1.1中广为人知的一些性能限制来减少网页的加载延迟”,主要优化如下:
多路复用的单一长连接:提高吞吐量
头部压缩和二进制格式:减少传输量
服务端推送Server Push:提前获取资源

http/1.0 短链接:三次握手 -> 单次请求传输 ->断开连接
http/1.1 长连接:三次握手 ->多个串行请求传输数据 ->断开连接
http/2.0 多路复用的单一长连接 :三次握手 -> 多个并行请求传输数据 ->断开连接

HTTP/2.0 虽然只有一条连接,但是可以发送多个请求,主要通过把信息分成一个个二进制,充分利用了带宽,提高了并发,并且可以对这些流指定优先级

8、长连接与短链接

短链接:在http/1.0中默认使用短链接,也就是说每进行一次http操作,就建立一次连接,任务结束就中断连接。优点在于管理起来比较简单,存在的连接都是有用的连接

长连接:从http/1.1起,默认使用长连接,用以保持连接特性,使用长连接的协议,会再响应头加入这行代码:Connection:keep-alive。 优点在于可以省去较多的tcp建立和关闭操作,减少浪费节约时间。对于频繁请求资源的客户端适用于长连接。